Token-based Authentication (JWT) এবং Ajax এর সংযোগ

Web Development - অ্যাজাক্স (Ajax) - Ajax এর মাধ্যমে Authentication এবং Authorization (Authentication and Authorization with Ajax) |
3
3

Token-based Authentication, বিশেষত JWT (JSON Web Token), আধুনিক ওয়েব অ্যাপ্লিকেশনগুলিতে নিরাপদ এবং স্কেলেবল প্রমাণীকরণের জন্য ব্যবহৃত একটি জনপ্রিয় পদ্ধতি। JWT ব্যবহার করে একটি সেশন-মুক্ত (stateless) প্রমাণীকরণ সিস্টেম তৈরি করা যায়, যেখানে টোকেন ব্যবহারকারীকে প্রমাণীকরণ করতে এবং তাদের অ্যাক্সেস নিয়ন্ত্রণ করতে সহায়তা করে।

Ajax এর মাধ্যমে JWT সিস্টেমের সাথে যোগাযোগ করলে ব্যবহারকারীকে পেজ রিফ্রেশ ছাড়াই নিরাপদভাবে ডেটা অ্যাক্সেস ও ইন্টারঅ্যাকশন করার সুযোগ দেওয়া যায়।

এই টিউটোরিয়ালে, আমরা JWT এবং Ajax এর সংযোগ সম্পর্কে বিস্তারিত আলোচনা করব এবং দেখাবো কীভাবে JWT ব্যবহার করে নিরাপদভাবে Ajax রিকোয়েস্ট করা যায়।


JWT (JSON Web Token) কী?

JWT (JSON Web Token) হল একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা JSON অবজেক্টের মাধ্যমে দুটি পক্ষের মধ্যে তথ্য নিরাপদে আদান-প্রদান করার জন্য ব্যবহৃত হয়। এটি সাধারণত একটি প্রমাণীকরণ (Authentication) টোকেন হিসেবে ব্যবহৃত হয়, যা ব্যবহারকারী লগইন করার পর সার্ভার থেকে ক্লায়েন্টে পাঠানো হয় এবং পরবর্তীতে API কল করার জন্য ব্যবহৃত হয়।

JWT একটি স্ট্রিং যা তিনটি অংশে বিভক্ত:

  1. Header: এটি JWT এর মেটা ডেটা ধারণ করে (যেমন, টোকেনের প্রকার এবং সিগনেচারের অ্যালগরিদম)।
  2. Payload: এটি টোকেনের মূল ডেটা ধারণ করে (যেমন, ব্যবহারকারীর তথ্য বা claim)।
  3. Signature: এটি টোকেনের সুরক্ষা নিশ্চিত করে।

এটি সাধারণত একটি বেস64-এনকোডেড স্ট্রিং আকারে সার্ভার এবং ক্লায়েন্টের মধ্যে আদান-প্রদান করা হয়।


JWT এবং Ajax এর সংযোগ

১. লগইন ফর্ম তৈরি

প্রথমে একটি লগইন ফর্ম তৈরি করা হবে, যেখানে ব্যবহারকারী তাদের ইউজারনেম এবং পাসওয়ার্ড ইনপুট করবে। যখন ব্যবহারকারী লগইন করবে, তখন সার্ভার JWT টোকেন রিটার্ন করবে, যা পরবর্তীতে Ajax রিকোয়েস্টে ব্যবহৃত হবে।

HTML (Login Form):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login with JWT</title>
</head>
<body>
    <h1>Login</h1>
    <form id="loginForm">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>
        <br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>
        <br>
        <button type="button" onclick="login()">Login</button>
    </form>
    <div id="response"></div>

    <script src="script.js"></script>
</body>
</html>

২. JavaScript (Ajax) তৈরি

এখন, একটি script.js ফাইল তৈরি করা হবে যা লগইন ফর্মের ডেটা সার্ভারে পাঠাবে এবং JWT টোকেন গ্রহণ করবে। এরপর, এই টোকেনটি ব্যবহার করে পরবর্তী Ajax রিকোয়েস্ট পাঠানো হবে।

script.js:

let jwtToken = ""; // JWT টোকেন

function login() {
    const username = document.getElementById("username").value;
    const password = document.getElementById("password").value;

    const loginData = {
        username: username,
        password: password
    };

    const xhr = new XMLHttpRequest();
    xhr.open("POST", "login.php", true); // এখানে API URL হবে যেখানে JWT তৈরি হবে
    xhr.setRequestHeader("Content-Type", "application/json");

    xhr.onload = function () {
        if (xhr.status === 200) {
            const response = JSON.parse(xhr.responseText);
            if (response.status === "success") {
                jwtToken = response.token; // JWT টোকেন গ্রহণ করা
                document.getElementById("response").innerHTML = "Login Successful!";
                // লগইন সফল হলে ড্যাশবোর্ডে রিডাইরেক্ট বা অন্য পেজে পাঠানো
                window.location.href = "dashboard.html";
            } else {
                document.getElementById("response").innerHTML = "Invalid username or password!";
            }
        } else {
            document.getElementById("response").innerHTML = "Error: Unable to process login request.";
        }
    };

    xhr.send(JSON.stringify(loginData)); // ফর্ম ডেটা পাঠানো
}

৩. PHP ফাইল (JWT তৈরি করা)

এখন, সার্ভারে একটি PHP ফাইল তৈরি করা হবে যা ইউজারনেম এবং পাসওয়ার্ড যাচাই করে, সঠিক হলে JWT টোকেন রিটার্ন করবে।

login.php:

<?php
// JWT লাইব্রেরি ব্যবহার করা
require_once 'vendor/autoload.php'; // JWT লাইব্রেরি লোড করা
use \Firebase\JWT\JWT;

// ইউজারনেম এবং পাসওয়ার্ড যাচাই করা
$validUsers = [
    'user1' => 'password1',
    'user2' => 'password2',
];

$data = json_decode(file_get_contents("php://input"), true);
$username = $data['username'];
$password = $data['password'];

// সঠিক হলে JWT টোকেন তৈরি করা
if (isset($validUsers[$username]) && $validUsers[$username] === $password) {
    $secretKey = "your_secret_key"; // আপনার সিক্রেট কী
    $issuedAt = time();
    $expirationTime = $issuedAt + 3600;  // 1 ঘণ্টা পরে টোকেন এক্সপায়ার হবে
    $payload = [
        'iat' => $issuedAt,
        'exp' => $expirationTime,
        'username' => $username
    ];

    // JWT টোকেন তৈরি করা
    $jwt = JWT::encode($payload, $secretKey);

    // JWT রিটার্ন করা
    echo json_encode(["status" => "success", "token" => $jwt]);
} else {
    echo json_encode(["status" => "error"]);
}
?>

৪. JWT টোকেন ব্যবহার করে Authentication

এখন, যেহেতু ব্যবহারকারী সফলভাবে লগইন করেছে এবং JWT টোকেন পেয়েছে, তাই টোকেন ব্যবহার করে পরবর্তী Ajax রিকোয়েস্টে প্রমাণীকরণ করা হবে।

Dashboard API Request (JWT দিয়ে প্রমাণীকরণ):

function fetchData() {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", "dashboard.php", true); // API URL যেখানে ডেটা ফেচ হবে
    xhr.setRequestHeader("Authorization", "Bearer " + jwtToken); // JWT টোকেন পাঠানো

    xhr.onload = function () {
        if (xhr.status === 200) {
            const response = JSON.parse(xhr.responseText);
            document.getElementById("response").innerHTML = response.data;
        } else {
            document.getElementById("response").innerHTML = "Error: Unable to fetch data.";
        }
    };

    xhr.send();
}

৫. Authorization (JWT দিয়ে অ্যাক্সেস চেক)

এখন সার্ভারের dashboard.php ফাইলে JWT টোকেন যাচাই করা হবে।

dashboard.php:

<?php
require_once 'vendor/autoload.php'; // JWT লাইব্রেরি লোড করা
use \Firebase\JWT\JWT;

$headers = apache_request_headers(); // রিকোয়েস্ট হেডার থেকে Authorization নেওয়া

if (isset($headers['Authorization'])) {
    $jwt = str_replace("Bearer ", "", $headers['Authorization']); // Bearer টোকেন এক্সট্রাক্ট করা

    try {
        $secretKey = "your_secret_key"; // সিক্রেট কী
        $decoded = JWT::decode($jwt, $secretKey, ['HS256']); // JWT ডিকোড করা

        // টোকেন থেকে ডেটা ব্যবহার করে ড্যাশবোর্ড ডেটা পাঠানো
        echo json_encode(["data" => "Welcome " . $decoded->username . ", here is your dashboard data"]);
    } catch (Exception $e) {
        echo json_encode(["error" => "Unauthorized"]);
    }
} else {
    echo json_encode(["error" => "Unauthorized"]);
}
?>

উপসংহার

JWT (JSON Web Token) ব্যবহার করে Authentication এবং Authorization প্রক্রিয়া আধুনিক ওয়েব অ্যাপ্লিকেশনে কার্যকরভাবে বাস্তবায়ন করা যায়। Ajax এবং JWT এর সংযোগ ব্যবহার করে ওয়েব অ্যাপ্লিকেশনগুলির প্রমাণীকরণ এবং অনুমোদন প্রক্রিয়া দ্রুত, নিরাপদ এবং পেজ রিফ্রেশ ছাড়াই পরিচালনা করা সম্ভব। এই কৌশলটি ডাইনামিক অ্যাপ্লিকেশনগুলির জন্য খুবই গুরুত্বপূর্ণ যেখানে রিয়েল-টাইম ডেট

া এক্সচেঞ্জ এবং নিরাপত্তা নিশ্চিত করা প্রয়োজন।

Content added By
Promotion